package cn.lili.modules.member.serviceimpl;

import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.utils.ResultUtil;
import cn.lili.common.utils.StringUtils;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.member.mapper.VipFlowMapper;
import cn.lili.modules.system.entity.dos.LiVipFlow;
import cn.lili.modules.system.entity.dto.VipFlowDto;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import cn.lili.modules.member.service.VipFlowService;
import org.springframework.stereotype.Service;

import java.util.Objects;

/**
* @author asus
* @description 针对表【li_vip_flow(会员流水表)】的数据库操作Service实现
* @createDate 2023-11-07 13:52:33
*/
@Service
public class VipFlowServiceImpl extends ServiceImpl<VipFlowMapper, LiVipFlow>
    implements VipFlowService{
    /**
     * 流水分页查询
     * @param dto
     * @return
     */
    @Override
    public ResultMessage<Object> findPage(VipFlowDto dto) {
        /**
         * 1.传入时间空值检测（起始时间跟结束时间必须同时为空或者不为空）
         * 2.开始时间不能大于结束时间
         */
        if ((dto.getStartTime()==null&&dto.getEndTime()!=null)||
                (dto.getStartTime()!=null&&dto.getEndTime()==null)){
            throw new ServiceException(ResultCode.PARAMS_ERROR);
        }
        if (dto.getStartTime()!=null&&dto.getEndTime()!=null){
            int result=dto.getStartTime().compareTo(dto.getEndTime());
            if (result==1)
                throw new ServiceException(ResultCode.TIME_ERROR);
        }
        LambdaQueryWrapper<LiVipFlow> wrapper=new LambdaQueryWrapper<>();
        wrapper.eq(!Objects.isNull(dto.getFlowType()),LiVipFlow::getFlowType,dto.getFlowType())
                .orderByDesc(LiVipFlow::getCreateTime)
                .eq(StringUtils.isNotEmpty(dto.getUserId()),LiVipFlow::getUserId,dto.getUserId())
                .between(((dto.getStartTime()!=null&&dto.getEndTime()!=null)),
                        LiVipFlow::getCreateTime,dto.getStartTime(),dto.getEndTime());
        Page<LiVipFlow> page = this.page(new Page<>(dto.getPageNumber(), dto.getPageSize()), wrapper);

        return ResultUtil.data(page);
    }
}




